<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>fdk-aac: original/libFDK/include/qmf.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">fdk-aac
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_ed137715e08969a186ec660e8ae6e2fb.html">original</a></li><li class="navelem"><a class="el" href="dir_28764f9257266d97c7295693d7c6996f.html">libFDK</a></li><li class="navelem"><a class="el" href="dir_50afa643936f0a319487661c78fd0109.html">include</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">qmf.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Complex qmf analysis/synthesis.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;common_fix.h&quot;</code><br />
<code>#include &quot;FDK_tools_rom.h&quot;</code><br />
<code>#include &quot;dct.h&quot;</code><br />
</div>
<p><a href="qmf_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_q_m_f___s_c_a_l_e___f_a_c_t_o_r.html">QMF_SCALE_FACTOR</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">QMF_FILTER_BANK</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a10fe7ac916f0fbc654aae7d498c9bdf3"><td class="memItemLeft" align="right" valign="top"><a id="a10fe7ac916f0fbc654aae7d498c9bdf3"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>FIXP_QAS</b>&#160;&#160;&#160;FIXP_PCM</td></tr>
<tr class="separator:a10fe7ac916f0fbc654aae7d498c9bdf3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4bc6aabb35c3cc7a7a5e980be8951f71"><td class="memItemLeft" align="right" valign="top"><a id="a4bc6aabb35c3cc7a7a5e980be8951f71"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QAS_BITS</b>&#160;&#160;&#160;SAMPLE_BITS</td></tr>
<tr class="separator:a4bc6aabb35c3cc7a7a5e980be8951f71"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4398625036e1a87e86beaa3f1322705"><td class="memItemLeft" align="right" valign="top"><a id="ae4398625036e1a87e86beaa3f1322705"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>INT_PCM_QMFIN</b>&#160;&#160;&#160;<a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a></td></tr>
<tr class="separator:ae4398625036e1a87e86beaa3f1322705"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab02efbd692efd8f91f553d72fad48818"><td class="memItemLeft" align="right" valign="top"><a id="ab02efbd692efd8f91f553d72fad48818"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>FIXP_QSS</b>&#160;&#160;&#160;FIXP_DBL</td></tr>
<tr class="separator:ab02efbd692efd8f91f553d72fad48818"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29ccf4ef4fdafc5934bde3ccd6b59f5d"><td class="memItemLeft" align="right" valign="top"><a id="a29ccf4ef4fdafc5934bde3ccd6b59f5d"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QSS_BITS</b>&#160;&#160;&#160;DFRACT_BITS</td></tr>
<tr class="separator:a29ccf4ef4fdafc5934bde3ccd6b59f5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1cb9ff31a1e874b84371cc4e1fe5ec2"><td class="memItemLeft" align="right" valign="top"><a id="aa1cb9ff31a1e874b84371cc4e1fe5ec2"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_LP</b>&#160;&#160;&#160;1</td></tr>
<tr class="separator:aa1cb9ff31a1e874b84371cc4e1fe5ec2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03f7334870d3d46f4b2b1c557197090b"><td class="memItemLeft" align="right" valign="top"><a id="a03f7334870d3d46f4b2b1c557197090b"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_NONSYMMETRIC</b>&#160;&#160;&#160;2</td></tr>
<tr class="separator:a03f7334870d3d46f4b2b1c557197090b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15beca6f5aa1f9e4e09051c2d188e05a"><td class="memItemLeft" align="right" valign="top"><a id="a15beca6f5aa1f9e4e09051c2d188e05a"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_CLDFB</b>&#160;&#160;&#160;4</td></tr>
<tr class="separator:a15beca6f5aa1f9e4e09051c2d188e05a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf88a678b1ba33d15d462f7eac4812c4"><td class="memItemLeft" align="right" valign="top"><a id="acf88a678b1ba33d15d462f7eac4812c4"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_KEEP_STATES</b>&#160;&#160;&#160;8</td></tr>
<tr class="separator:acf88a678b1ba33d15d462f7eac4812c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79d227d3452d545f7e9879737b8eeab3"><td class="memItemLeft" align="right" valign="top"><a id="a79d227d3452d545f7e9879737b8eeab3"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_MPSLDFB</b>&#160;&#160;&#160;16</td></tr>
<tr class="separator:a79d227d3452d545f7e9879737b8eeab3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f2ac5f7682c85efe4fa7747acbaae73"><td class="memItemLeft" align="right" valign="top"><a id="a5f2ac5f7682c85efe4fa7747acbaae73"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_MPSLDFB_OPTIMIZE_MODULATION</b>&#160;&#160;&#160;32</td></tr>
<tr class="separator:a5f2ac5f7682c85efe4fa7747acbaae73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ebff55183a9210fedc103fd69da0a65"><td class="memItemLeft" align="right" valign="top"><a id="a4ebff55183a9210fedc103fd69da0a65"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_FLAG_DOWNSAMPLED</b>&#160;&#160;&#160;64</td></tr>
<tr class="separator:a4ebff55183a9210fedc103fd69da0a65"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a636c31412f16488fe0571d20dc2957ae"><td class="memItemLeft" align="right" valign="top"><a id="a636c31412f16488fe0571d20dc2957ae"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><b>QMF_MAX_SYNTHESIS_BANDS</b>&#160;&#160;&#160;(64)</td></tr>
<tr class="separator:a636c31412f16488fe0571d20dc2957ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0b0c89a0f6a2848cbfb0779a4717247"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#ac0b0c89a0f6a2848cbfb0779a4717247">ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK</a>&#160;&#160;&#160;7</td></tr>
<tr class="memdesc:ac0b0c89a0f6a2848cbfb0779a4717247"><td class="mdescLeft">&#160;</td><td class="mdescRight">Algorithmic scaling in sbrForwardModulation()  <a href="qmf_8h.html#ac0b0c89a0f6a2848cbfb0779a4717247">More...</a><br /></td></tr>
<tr class="separator:ac0b0c89a0f6a2848cbfb0779a4717247"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a135ce709622d8bbb42cabd15668d9ea5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a135ce709622d8bbb42cabd15668d9ea5">ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:a135ce709622d8bbb42cabd15668d9ea5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Algorithmic scaling in cplxSynthesisQmfFiltering()  <a href="qmf_8h.html#a135ce709622d8bbb42cabd15668d9ea5">More...</a><br /></td></tr>
<tr class="separator:a135ce709622d8bbb42cabd15668d9ea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a6331270a84260d6c0f866f07e18b5973"><td class="memItemLeft" align="right" valign="top"><a id="a6331270a84260d6c0f866f07e18b5973"></a>
typedef struct <a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">QMF_FILTER_BANK</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>HANDLE_QMF_FILTER_BANK</b></td></tr>
<tr class="separator:a6331270a84260d6c0f866f07e18b5973"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a2eebf39f55d68bc420322cbef754ce44"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a2eebf39f55d68bc420322cbef754ce44">qmfInitAnalysisFilterBank</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> h_Qmf, FIXP_QAS *pFilterStates, int noCols, int lsb, int usb, int no_channels, int flags)</td></tr>
<tr class="memdesc:a2eebf39f55d68bc420322cbef754ce44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create QMF filter bank instance.  <a href="qmf_8h.html#a2eebf39f55d68bc420322cbef754ce44">More...</a><br /></td></tr>
<tr class="separator:a2eebf39f55d68bc420322cbef754ce44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66711cf6dcf999fad902dd68b0381040"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a66711cf6dcf999fad902dd68b0381040">qmfAnalysisFiltering</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> anaQmf, FIXP_DBL **qmfReal, FIXP_DBL **qmfImag, <a class="el" href="struct_q_m_f___s_c_a_l_e___f_a_c_t_o_r.html">QMF_SCALE_FACTOR</a> *scaleFactor, const <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *timeIn, const int timeIn_e, const int stride, FIXP_DBL *pWorkBuffer)</td></tr>
<tr class="separator:a66711cf6dcf999fad902dd68b0381040"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1828474d65f0df57dc19ee57f5059604"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a1828474d65f0df57dc19ee57f5059604">qmfAnalysisFilteringSlot</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> anaQmf, FIXP_DBL *qmfReal, FIXP_DBL *qmfImag, const <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *timeIn, const int stride, FIXP_DBL *pWorkBuffer)</td></tr>
<tr class="separator:a1828474d65f0df57dc19ee57f5059604"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbf62e34fe9c67ebe0b5efb56e312110"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#afbf62e34fe9c67ebe0b5efb56e312110">qmfInitSynthesisFilterBank</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> h_Qmf, FIXP_QSS *pFilterStates, int noCols, int lsb, int usb, int no_channels, int flags)</td></tr>
<tr class="memdesc:afbf62e34fe9c67ebe0b5efb56e312110"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create QMF filter bank instance.  <a href="qmf_8h.html#afbf62e34fe9c67ebe0b5efb56e312110">More...</a><br /></td></tr>
<tr class="separator:afbf62e34fe9c67ebe0b5efb56e312110"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90bee73427a5c886148fbc2aeeb349f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a90bee73427a5c886148fbc2aeeb349f1">qmfSynthesisFiltering</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> synQmf, FIXP_DBL **QmfBufferReal, FIXP_DBL **QmfBufferImag, const <a class="el" href="struct_q_m_f___s_c_a_l_e___f_a_c_t_o_r.html">QMF_SCALE_FACTOR</a> *scaleFactor, const int ov_len, <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *timeOut, const <a class="el" href="machine__type_8h.html#a4cf9af43a95c45c3d469658098dfbe1a">INT</a> stride, FIXP_DBL *pWorkBuffer)</td></tr>
<tr class="separator:a90bee73427a5c886148fbc2aeeb349f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4abb69a8ddc95c04843fe5809df4767"><td class="memItemLeft" align="right" valign="top"><a id="ad4abb69a8ddc95c04843fe5809df4767"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>qmfSynthesisFilteringSlot</b> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> synQmf, const FIXP_DBL *realSlot, const FIXP_DBL *imagSlot, const int scaleFactorLowBand, const int scaleFactorHighBand, <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *timeOut, const int timeOut_e, FIXP_DBL *pWorkBuffer)</td></tr>
<tr class="separator:ad4abb69a8ddc95c04843fe5809df4767"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5bef0d7634451ad6d4ae534c91f2d37"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#ae5bef0d7634451ad6d4ae534c91f2d37">qmfChangeOutScalefactor</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> synQmf, int outScalefactor)</td></tr>
<tr class="memdesc:ae5bef0d7634451ad6d4ae534c91f2d37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change scale factor for output data and adjust qmf filter states.  <a href="qmf_8h.html#ae5bef0d7634451ad6d4ae534c91f2d37">More...</a><br /></td></tr>
<tr class="separator:ae5bef0d7634451ad6d4ae534c91f2d37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d9c3e55c050c9aeecf63f45666d7fe0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#a3d9c3e55c050c9aeecf63f45666d7fe0">qmfGetOutScalefactor</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> synQmf)</td></tr>
<tr class="memdesc:a3d9c3e55c050c9aeecf63f45666d7fe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get scale factor change which was set by <a class="el" href="qmf_8cpp.html#ae5bef0d7634451ad6d4ae534c91f2d37" title="Change scale factor for output data and adjust qmf filter states.">qmfChangeOutScalefactor()</a>  <a href="qmf_8h.html#a3d9c3e55c050c9aeecf63f45666d7fe0">More...</a><br /></td></tr>
<tr class="separator:a3d9c3e55c050c9aeecf63f45666d7fe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb1256d28e1dce82ccdf06eb7e0d55d2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="qmf_8h.html#acb1256d28e1dce82ccdf06eb7e0d55d2">qmfChangeOutGain</a> (<a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a> synQmf, FIXP_DBL outputGain, int outputGainScale)</td></tr>
<tr class="memdesc:acb1256d28e1dce82ccdf06eb7e0d55d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change gain for output data.  <a href="qmf_8h.html#acb1256d28e1dce82ccdf06eb7e0d55d2">More...</a><br /></td></tr>
<tr class="separator:acb1256d28e1dce82ccdf06eb7e0d55d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Complex qmf analysis/synthesis. </p>
<dl class="section author"><dt>Author</dt><dd>Markus Werner </dd></dl>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="ac0b0c89a0f6a2848cbfb0779a4717247"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac0b0c89a0f6a2848cbfb0779a4717247">&#9670;&nbsp;</a></span>ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK&#160;&#160;&#160;7</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Algorithmic scaling in sbrForwardModulation() </p>
<p>The scaling in sbrForwardModulation() is caused by:</p>
<ul>
<li>1 R_SHIFT in sbrForwardModulation() </li>
<li>5/6 R_SHIFT in dct3() if using 32/64 Bands </li>
<li>1 omitted gain of 2.0 in qmfForwardModulation() </li>
</ul>

</div>
</div>
<a id="a135ce709622d8bbb42cabd15668d9ea5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a135ce709622d8bbb42cabd15668d9ea5">&#9670;&nbsp;</a></span>ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK&#160;&#160;&#160;1</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Algorithmic scaling in cplxSynthesisQmfFiltering() </p>
<p>The scaling in cplxSynthesisQmfFiltering() is caused by:</p>
<ul>
<li>5/6 R_SHIFT in dct2() if using 32/64 Bands </li>
<li>1 omitted gain of 2.0 in qmfInverseModulation() </li>
<li>-6 division by 64 in synthesis filterbank </li>
<li>x bits external influence </li>
</ul>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a66711cf6dcf999fad902dd68b0381040"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a66711cf6dcf999fad902dd68b0381040">&#9670;&nbsp;</a></span>qmfAnalysisFiltering()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qmfAnalysisFiltering </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>anaQmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL **&#160;</td>
          <td class="paramname"><em>qmfReal</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL **&#160;</td>
          <td class="paramname"><em>qmfImag</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___s_c_a_l_e___f_a_c_t_o_r.html">QMF_SCALE_FACTOR</a> *&#160;</td>
          <td class="paramname"><em>scaleFactor</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *&#160;</td>
          <td class="paramname"><em>timeIn</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>timeIn_e</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL *&#160;</td>
          <td class="paramname"><em>pWorkBuffer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">anaQmf</td><td>Handle of Qmf Analysis Bank </td></tr>
    <tr><td class="paramname">qmfReal</td><td>Pointer to real subband slots </td></tr>
    <tr><td class="paramname">qmfImag</td><td>Pointer to imag subband slots </td></tr>
    <tr><td class="paramname">scaleFactor</td><td>Scale factors of QMF data </td></tr>
    <tr><td class="paramname">timeIn</td><td>Time signal </td></tr>
    <tr><td class="paramname">timeIn_e</td><td>Exponent of audio data </td></tr>
    <tr><td class="paramname">stride</td><td>Stride factor of audio data </td></tr>
    <tr><td class="paramname">pWorkBuffer</td><td>pointer to temporal working buffer </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a1828474d65f0df57dc19ee57f5059604"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1828474d65f0df57dc19ee57f5059604">&#9670;&nbsp;</a></span>qmfAnalysisFilteringSlot()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qmfAnalysisFilteringSlot </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>anaQmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL *&#160;</td>
          <td class="paramname"><em>qmfReal</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL *&#160;</td>
          <td class="paramname"><em>qmfImag</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *&#160;</td>
          <td class="paramname"><em>timeIn</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL *&#160;</td>
          <td class="paramname"><em>pWorkBuffer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">anaQmf</td><td>Handle of Qmf Synthesis Bank </td></tr>
    <tr><td class="paramname">qmfReal</td><td>Low and High band, real </td></tr>
    <tr><td class="paramname">qmfImag</td><td>Low and High band, imag </td></tr>
    <tr><td class="paramname">timeIn</td><td>Pointer to input </td></tr>
    <tr><td class="paramname">stride</td><td>stride factor of input </td></tr>
    <tr><td class="paramname">pWorkBuffer</td><td>pointer to temporal working buffer </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="acb1256d28e1dce82ccdf06eb7e0d55d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb1256d28e1dce82ccdf06eb7e0d55d2">&#9670;&nbsp;</a></span>qmfChangeOutGain()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qmfChangeOutGain </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>synQmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL&#160;</td>
          <td class="paramname"><em>outputGain</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>outputGainScale</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Change gain for output data. </p>
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">synQmf</td><td>Handle of Qmf Synthesis Bank </td></tr>
    <tr><td class="paramname">outputGain</td><td>New gain for output data (mantissa) </td></tr>
    <tr><td class="paramname">outputGainScale</td><td>New gain for output data (exponent) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ae5bef0d7634451ad6d4ae534c91f2d37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5bef0d7634451ad6d4ae534c91f2d37">&#9670;&nbsp;</a></span>qmfChangeOutScalefactor()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qmfChangeOutScalefactor </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>synQmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>outScalefactor</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Change scale factor for output data and adjust qmf filter states. </p>
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">synQmf</td><td>Handle of Qmf Synthesis Bank </td></tr>
    <tr><td class="paramname">outScalefactor</td><td>New scaling factor for output data </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a3d9c3e55c050c9aeecf63f45666d7fe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d9c3e55c050c9aeecf63f45666d7fe0">&#9670;&nbsp;</a></span>qmfGetOutScalefactor()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int qmfGetOutScalefactor </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>synQmf</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get scale factor change which was set by <a class="el" href="qmf_8cpp.html#ae5bef0d7634451ad6d4ae534c91f2d37" title="Change scale factor for output data and adjust qmf filter states.">qmfChangeOutScalefactor()</a> </p>
<dl class="section return"><dt>Returns</dt><dd>scaleFactor </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">synQmf</td><td>Handle of Qmf Synthesis Bank </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a2eebf39f55d68bc420322cbef754ce44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2eebf39f55d68bc420322cbef754ce44">&#9670;&nbsp;</a></span>qmfInitAnalysisFilterBank()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int qmfInitAnalysisFilterBank </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>h_Qmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_QAS *&#160;</td>
          <td class="paramname"><em>pFilterStates</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>noCols</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>lsb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>usb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>no_channels</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Create QMF filter bank instance. </p>
<p>Flags</p>
<dl class="section return"><dt>Returns</dt><dd>0 if successful </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">h_Qmf</td><td>Returns handle </td></tr>
    <tr><td class="paramname">pFilterStates</td><td>Handle to filter states </td></tr>
    <tr><td class="paramname">noCols</td><td>Number of timeslots per frame </td></tr>
    <tr><td class="paramname">lsb</td><td>lower end of QMF </td></tr>
    <tr><td class="paramname">usb</td><td>upper end of QMF </td></tr>
    <tr><td class="paramname">no_channels</td><td>Number of channels (bands) </td></tr>
    <tr><td class="paramname">flags</td><td>Low Power flag </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="afbf62e34fe9c67ebe0b5efb56e312110"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afbf62e34fe9c67ebe0b5efb56e312110">&#9670;&nbsp;</a></span>qmfInitSynthesisFilterBank()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int qmfInitSynthesisFilterBank </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>h_Qmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_QSS *&#160;</td>
          <td class="paramname"><em>pFilterStates</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>noCols</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>lsb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>usb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>no_channels</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Create QMF filter bank instance. </p>
<p>Flags</p>
<dl class="section return"><dt>Returns</dt><dd>0 if succesful </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">h_Qmf</td><td>Returns handle </td></tr>
    <tr><td class="paramname">pFilterStates</td><td>Handle to filter states </td></tr>
    <tr><td class="paramname">noCols</td><td>Number of timeslots per frame </td></tr>
    <tr><td class="paramname">lsb</td><td>lower end of QMF </td></tr>
    <tr><td class="paramname">usb</td><td>upper end of QMF </td></tr>
    <tr><td class="paramname">no_channels</td><td>Number of channels (bands) </td></tr>
    <tr><td class="paramname">flags</td><td>Low Power flag </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a90bee73427a5c886148fbc2aeeb349f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90bee73427a5c886148fbc2aeeb349f1">&#9670;&nbsp;</a></span>qmfSynthesisFiltering()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qmfSynthesisFiltering </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_q_m_f___f_i_l_t_e_r___b_a_n_k.html">HANDLE_QMF_FILTER_BANK</a>&#160;</td>
          <td class="paramname"><em>synQmf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL **&#160;</td>
          <td class="paramname"><em>QmfBufferReal</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL **&#160;</td>
          <td class="paramname"><em>QmfBufferImag</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="struct_q_m_f___s_c_a_l_e___f_a_c_t_o_r.html">QMF_SCALE_FACTOR</a> *&#160;</td>
          <td class="paramname"><em>scaleFactor</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int&#160;</td>
          <td class="paramname"><em>ov_len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="machine__type_8h.html#ac024ad9a1e48a3e87d360d519d943512">INT_PCM</a> *&#160;</td>
          <td class="paramname"><em>timeOut</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="machine__type_8h.html#a4cf9af43a95c45c3d469658098dfbe1a">INT</a>&#160;</td>
          <td class="paramname"><em>stride</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FIXP_DBL *&#160;</td>
          <td class="paramname"><em>pWorkBuffer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">synQmf</td><td>Handle of Qmf Synthesis Bank </td></tr>
    <tr><td class="paramname">QmfBufferReal</td><td>Pointer to real subband slots </td></tr>
    <tr><td class="paramname">QmfBufferImag</td><td>Pointer to imag subband slots </td></tr>
    <tr><td class="paramname">scaleFactor</td><td>Scale factors of QMF data </td></tr>
    <tr><td class="paramname">ov_len</td><td>Length of band overlap </td></tr>
    <tr><td class="paramname">timeOut</td><td>Time signal </td></tr>
    <tr><td class="paramname">stride</td><td>Stride factor of audio data </td></tr>
    <tr><td class="paramname">pWorkBuffer</td><td>pointer to temporary working buffer. It must be aligned </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>
